Imports AxSftTreeLib70
Imports SftTreeLib70
Imports Softelvdm.OLEConvert

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.  
    'Do not modify it using the code editor.
Public WithEvents Command1 As System.Windows.Forms.Button
Public WithEvents Timer1 As System.Windows.Forms.Timer
Friend WithEvents imageListWorld As System.Windows.Forms.ImageList
Friend WithEvents imageListBitmaps As System.Windows.Forms.ImageList
Public WithEvents Label5 As System.Windows.Forms.Label
Public WithEvents EditControl As System.Windows.Forms.TextBox
Friend WithEvents AxSftTree1 As AxSftTreeLib70.AxSftTree
Friend WithEvents SftHelperComponent1 As Softelvdm.OCXHelper.SftHelperComponent
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.Command1 = New System.Windows.Forms.Button()
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
Me.imageListWorld = New System.Windows.Forms.ImageList(Me.components)
Me.imageListBitmaps = New System.Windows.Forms.ImageList(Me.components)
Me.Label5 = New System.Windows.Forms.Label()
Me.AxSftTree1 = New AxSftTreeLib70.AxSftTree()
Me.EditControl = New System.Windows.Forms.TextBox()
Me.SftHelperComponent1 = New Softelvdm.OCXHelper.SftHelperComponent(Me.components)
CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Command1
'
Me.Command1.Anchor = (System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right)
Me.Command1.BackColor = System.Drawing.SystemColors.Control
Me.Command1.Cursor = System.Windows.Forms.Cursors.Default
Me.Command1.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Command1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Command1.ForeColor = System.Drawing.SystemColors.ControlText
Me.Command1.Location = New System.Drawing.Point(368, 8)
Me.Command1.Name = "Command1"
Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Command1.Size = New System.Drawing.Size(88, 24)
Me.Command1.TabIndex = 35
Me.Command1.Text = "Close"
'
'Timer1
'
Me.Timer1.Enabled = True
'
'imageListWorld
'
Me.imageListWorld.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
Me.imageListWorld.ImageSize = New System.Drawing.Size(32, 32)
Me.imageListWorld.ImageStream = CType(resources.GetObject("imageListWorld.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.imageListWorld.TransparentColor = System.Drawing.Color.White
'
'imageListBitmaps
'
Me.imageListBitmaps.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
Me.imageListBitmaps.ImageSize = New System.Drawing.Size(16, 16)
Me.imageListBitmaps.ImageStream = CType(resources.GetObject("imageListBitmaps.ImageStream"), System.Windows.Forms.ImageListStreamer)
Me.imageListBitmaps.TransparentColor = System.Drawing.Color.Blue
'
'Label5
'
Me.Label5.BackColor = System.Drawing.SystemColors.Control
Me.Label5.Cursor = System.Windows.Forms.Cursors.Default
Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label5.ForeColor = System.Drawing.SystemColors.ControlText
Me.Label5.Location = New System.Drawing.Point(368, 112)
Me.Label5.Name = "Label5"
Me.Label5.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Label5.Size = New System.Drawing.Size(89, 328)
Me.Label5.TabIndex = 36
Me.Label5.Text = "Click on the SftTree/OCX control and hit F1 to access online help for SftTree/OCX" & _
" 6.0"
Me.Label5.Visible = False
'
'AxSftTree1
'
Me.AxSftTree1.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
            Or System.Windows.Forms.AnchorStyles.Left) _
            Or System.Windows.Forms.AnchorStyles.Right)
Me.AxSftTree1.Location = New System.Drawing.Point(8, 8)
Me.AxSftTree1.Name = "AxSftTree1"
Me.AxSftTree1.OcxState = CType(resources.GetObject("AxSftTree1.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxSftTree1.Size = New System.Drawing.Size(353, 400)
Me.AxSftTree1.TabIndex = 34
'
'EditControl
'
Me.EditControl.AcceptsReturn = True
Me.EditControl.AutoSize = False
Me.EditControl.BackColor = System.Drawing.SystemColors.Window
Me.EditControl.Cursor = System.Windows.Forms.Cursors.IBeam
Me.EditControl.Enabled = False
Me.EditControl.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.EditControl.ForeColor = System.Drawing.SystemColors.WindowText
Me.EditControl.Location = New System.Drawing.Point(368, 40)
Me.EditControl.MaxLength = 0
Me.EditControl.Name = "EditControl"
Me.EditControl.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.EditControl.Size = New System.Drawing.Size(89, 19)
Me.EditControl.TabIndex = 37
Me.EditControl.Text = "EditControl"
Me.EditControl.Visible = False
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.CancelButton = Me.Command1
Me.ClientSize = New System.Drawing.Size(464, 414)
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.EditControl, Me.Command1, Me.Label5, Me.AxSftTree1})
Me.Name = "Form1"
Me.Text = "Softel vdm, Inc. - Virtual Sample"
CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)

    End Sub

#End Region
    '--locate-marker--

    Private m_PicCount As Integer = 0 ' spinning globe index

    Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
        Application.Exit()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        m_PicCount = 0
        AxSftTree1.VirtualMode = True
        AxSftTree1.VirtualCount(10000000)
        AxSftTree1.VirtualImageSizes(16, 16, 16, 16, 16, 16, 16, 16)
        ' Make columns and row headers optimal
        ' but do this at the end of the list, because our sample
        ' data is larger at the end
        AxSftTree1.Items.TopIndex = AxSftTree1.Items.Count - 1
        AxSftTree1.ColumnsObj.MakeOptimal()
        AxSftTree1.RowHeaders.MakeOptimal()
        AxSftTree1.Items.RecalcHorizontalExtent()
        AxSftTree1.Items.TopIndex = 0
    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        AxSftTree1.RowColumnHeader.Image.NETImageObject = imageListWorld.Images(m_PicCount)
        m_PicCount = m_PicCount + 1
        If m_PicCount >= imageListWorld.Images.Count Then
            m_PicCount = 0
        End If
    End Sub

    Private Sub AxSftTree1_VirtualItem(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_VirtualItemEvent) Handles AxSftTree1.VirtualItem
        e.itemObject.Item.Cell(0).Text = "Item " & e.rowIndex
        e.itemObject.Item.Cell(1).Text = "Cell " & e.rowIndex
        e.itemObject.Item.Cell(2).Text = "A"
        e.itemObject.Item.Cell(3).Text = (e.rowIndex Mod 7)
        e.itemObject.Item.Cell(4).Text = "Last " & e.rowIndex
        e.itemObject.Item.RowHeader.Text = "R" & e.rowIndex
        e.itemObject.Item.Enabled = ((e.rowIndex Mod 2) = 0)

        If e.rowIndex Mod 17 = 0 Then
            e.itemObject.Item.RowHeader.Image.NETImageObject = imageListBitmaps.Images(e.rowIndex Mod 10)
        End If
        If e.rowIndex Mod 3 = 0 Then
            e.itemObject.Item.Cell(1).ForeColor = OLECvt.ToOleColor(System.Drawing.Color.Red)
            e.itemObject.Item.Cell(1).BackColor = OLECvt.ToOleColor(System.Drawing.Color.Aqua)
        End If
        If e.rowIndex Mod 5 = 0 Then
            e.itemObject.Item.Cell(1).Font.Bold = True
        End If
        If e.rowIndex Mod 7 = 0 Then
            e.itemObject.Item.Image.NETImageObject = imageListBitmaps.Images((e.rowIndex + 9) Mod 10)
            e.itemObject.Item.LabelImage.NETImageObject = imageListBitmaps.Images((e.rowIndex + 1) Mod 10)
        End If
        If e.rowIndex Mod 13 = 0 Then
            e.itemObject.Item.RowHeader.Image.NETImageObject = imageListBitmaps.Images((e.rowIndex + 5) Mod 10)
        End If
        If e.rowIndex Mod 11 = 0 Then
            e.itemObject.Item.RowHeader.ImageHAlign = SftTreeHAlignConstants.halignSftTreeRight
        End If
        If e.rowIndex Mod 9 = 0 Then
            e.itemObject.Item.Cell(1).Image.NETImageObject = imageListBitmaps.Images((e.rowIndex + 3) Mod 10)
        End If
        If e.rowIndex Mod 7 = 0 Then
            e.itemObject.Item.Cell(0).Image.NETImageObject = imageListBitmaps.Images((e.rowIndex + 2) Mod 10)
            e.itemObject.Item.Cell(0).ImageHAlign = SftTreeHAlignConstants.halignSftTreeRight
        End If
    End Sub

    Private Sub AxSftTree1_ItemClick(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ItemClickEvent) Handles AxSftTree1.ItemClick
        If e.areaType = SftTreeAreaTypeConstants.constSftTreeText Then
            AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Edit(0, 0)
        End If
    End Sub

    Private Sub AxSftTree1_ItemDblClick(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_ItemDblClickEvent) Handles AxSftTree1.ItemDblClick
        If e.areaType = SftTreeAreaTypeConstants.constSftTreeColumnRes Then
            AxSftTree1.get_Column(e.colIndex).MakeOptimal()
        End If
    End Sub

    Private Sub AxSftTree1_EditInitializing(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditInitializingEvent) Handles AxSftTree1.EditInitializing
        Timer1.Enabled = False ' stop the spinning globe

        ' LeftPix/TopPix/WidthPix/HeightPix describes the current cell area
        ' we need to return the position and size needed for editing.
        ' In this example, we use the height of the control on the form
        ' and center it over the cell.
        e.topPix = e.topPix + (e.heightPix - EditControl.Height) / 2
        e.heightPix = EditControl.Height

        ' Set the text in the control used for cell editing and
        ' set other control-specific properties
        EditControl.Width = 200
        EditControl.Text = AxSftTree1.get_Cell(e.editIndex, e.editCol).Text
        EditControl.SelectionStart = 0
        EditControl.SelectionLength = 999

        ' Return the control's window handle
        e.window = EditControl.Handle.ToInt32()
        e.vData = EditControl

        ' Define navigation keys
        ' VK_TAB
        AxSftTree1.CellEditIntercept(9, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_RETURN
        AxSftTree1.CellEditIntercept(13, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_HOME
        AxSftTree1.CellEditIntercept(36, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
        ' VK_END
        AxSftTree1.CellEditIntercept(35, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
        ' VK_UP
        AxSftTree1.CellEditIntercept(38, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_DOWN
        AxSftTree1.CellEditIntercept(40, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
    End Sub

    Private Sub AxSftTree1_EditNavigating(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditNavigatingEvent) Handles AxSftTree1.EditNavigating
        ' Process key pressed
        AxSftTree1.EditNavigate(e.key, e.shift)
    End Sub

    Private Sub AxSftTree1_EditValidate(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditValidateEvent) Handles AxSftTree1.EditValidate
        ' Validate the new cell contents
        If EditControl.Text <> AxSftTree1.get_Cell(e.editIndex, e.editCol).Text Then
            MessageBox.Show("This example doesn't preserve the changes you make, because the sample data is randomly generated.")
        End If
    End Sub

    Private Sub AxSftTree1_EditEnding(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditEndingEvent) Handles AxSftTree1.EditEnding
        Dim ctrl As Control = e.vData
        ctrl.Visible = False
        ctrl.Enabled = False
    End Sub

    Private Sub AxSftTree1_EditEnded(ByVal sender As Object, ByVal e As AxSftTreeLib70._DSftTreeEvents_EditEndedEvent) Handles AxSftTree1.EditEnded
        Timer1.Enabled = True ' restart the spinning globe
    End Sub

End Class